# coding=utf8
import xlrd
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pyecharts.charts import Bar
from pyecharts.charts import Pie, Grid
from pyecharts import options as opts

plt.rcParams['font.sans-serif'] = ['SimHei']  # 显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 消除负数

# ==================== Excel数据处理 ====================
# 导入Excel 文件
data = xlrd.open_workbook("D:/爬虫生成文件/NBA部分球员数据.xls")
# 载入第一个表格
table = data.sheets()[0]
# 从第2行开始读取数据，因为这个Excel文件里面从第四行开始才是球员信息
for rows in range(1, table.nrows - 1):
    dict_ = {"排名": "", "球员": "", "球队": "", "得分": "", "命中-出手": "", "命中率": "",
             "命中-三分": "", "三分命中率": "", "命中-罚球": "", "罚球命中率": "", "场次": "", "上场时间": "", }
    dict_["排名"] = table.cell_value(rows, 0)
    dict_["球员"] = table.cell_value(rows, 1)
    dict_["球队"] = table.cell_value(rows, 2)
    dict_["得分"] = table.cell_value(rows, 3)
    dict_["命中-出手"] = table.cell_value(rows, 4)
    dict_["命中率"] = table.cell_value(rows, 5)
    dict_["命中-三分"] = table.cell_value(rows, 6)
    dict_["三分命中率"] = table.cell_value(rows, 7)
    dict_["命中-罚球"] = table.cell_value(rows, 8)
    dict_["罚球命中率"] = table.cell_value(rows, 9)
    dict_["场次"] = table.cell_value(rows, 10)
    dict_["上场时间"] = table.cell_value(rows, 11)

# 控制台输出excel转成的字典
# Read_Excel(table)
# for i in table:
#     print(i)

a = 0  # 得分在30~35分的人数
b = 0  # 得分在25~30分的人数
c = 0  # 得分在20~25分的人数
d = 0  # 得分在15~20分的人数

for rows in range(1, table.nrows - 1):
    score = table.cell(rows, 3).value
    if 35 > score >= 30:
        a = a + 1
    elif 30 > score >= 25:
        b = b + 1
    elif 25 > score >= 20:
        c = c + 1
    elif 20 > score >= 15:
        d = d + 1

# 开始绘图
labels = '得分：30~35', '得分：25~30', '得分：20~25', '得分：15~20'
sizes = [a, b, c, d]
explode = [0, 0.1, 0, 0]  # 0.1 凸出这部分，
fig1, ax1 = plt.subplots()
pie = ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
              shadow=False, startangle=90)
plt.legend(loc='best', edgecolor='blue')
ax1.axis('equal')
plt.title('分析')
plt.show()

# ==================== 直方图 ====================
# 数据准备
a1 = 0
a2 = 0
a3 = 0
a4 = 0
a5 = 0

for rows in range(1, table.nrows - 1):
    team = table.cell(rows, 2).value
    if team == '勇士':
        a1 = a1 + 1
    elif team == '奇才':
        a2 = a2 + 1
    elif team == '开拓者':
        a3 = a3 + 1
    elif team == '76人':
        a4 = a4 + 1
    elif team == '雄鹿':
        a5 = a5 + 1

# 开始绘图
N = 5
y = ['勇士', '奇才', '开拓者', '76人', '雄鹿']
x = [a1, a2, a3, a4, a5]
# 绘图 x= 起始位置， bottom= 水平条的底部(左侧), y轴， height 水平条的宽度， width 水平条的长度
p1 = plt.bar(x=0, bottom=y, height=0.5, width=x, orientation="horizontal")
# pyplot.bar(range(arr_len),singer_num,align='center')
# pyplot.bar(x=0, bottom=range(arr_len), height=0.5, width=singer_num, orientation="horizontal")
# 展示图形
plt.show()

# ==================== 折线图 ====================
# 数据准备
df = pd.read_excel("D:/爬虫生成文件/NBA部分球员数据.xls")
# print(df) #查看表格数据
# print(df.球员) #查看球员这一列的数据
plt.plot(df["球员"], df["场次"], label='球员', linewidth=3, color='r', marker='o',
         markerfacecolor='blue', markersize=12)
#
plt.xlabel("球员")
plt.ylabel('场次')
plt.title("球员出席情况")
plt.legend()
plt.grid()
plt.show()

# ===================雷达图===========================

# 数据准备
b2 = table.cell(1, 5).value
b3 = table.cell(1, 7).value
b4 = table.cell(1, 9).value

# 使用ggplot的绘图风格
plt.style.use('ggplot')

# 构造数据
values = [b2, b3, b4]
feature = ['命中率', '三分命中率', '罚球命中率']
# 设置每个数据点的显示位置，在雷达图上用角度表示
angles = np.linspace(0, 2 * np.pi, len(values), endpoint=False)
# 拼接数据首尾，使图形中线条封闭
values = np.concatenate((values, [values[0]]))
angles = np.concatenate((angles, [angles[0]]))

# 绘图
fig = plt.figure()
# # 设置为极坐标格式
ax = fig.add_subplot(111, polar=True)
# 绘制折线图
ax.plot(angles, values, 'o-', linewidth=2)
# 填充颜色
ax.fill(angles, values, alpha=0.25)

# # 设置图标上的角度划分刻度，为每个数据点处添加标签
ax.set_thetagrids(angles[:3] * 180 / np.pi, feature, fontproperties='simhei')

# 设置雷达图的范围
ax.set_ylim(0, 1)
# 添加标题
plt.title('库里个人表现情况')
# 添加网格线
ax.grid(True)
plt.show()
